/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package invsys.Controladores;

import invsys.Modelo.Producto;
import invsys.Utilidades.ManejadorBaseDatos;
import invsys.Utilidades.ValidarorVistas;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author luigie
 */
public class ControlProducto {
    public static Producto load(ResultSet rs) throws SQLException{
        Producto p=new Producto();
        p.setCodigo(rs.getString(1));
        p.setTipo(rs.getString(2));
        p.setNombre(rs.getString(3));
        p.setDescripcion(rs.getString(4));
         p.setPrecio(rs.getDouble(5));
         p.setCantidad(rs.getDouble(6));
         p.setPreciocompra(rs.getDouble(7));
         p.setStockMin(rs.getDouble(8));
         p.setProveedor(ControlProveedor.BuscarProveedor(rs.getString(9)));
            
        return p;
    }
      static ValidarorVistas vistas=new ValidarorVistas();
  private static List productos;
  public static Connection con;
  public static void RegistrarProducto(Producto  p) throws SQLException, IOException, Exception {
        ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con = mbd.getConexion();
        if (con == null) {
            throw new SQLException(" no hay conexion ");
        }
        PreparedStatement pst = null;

        try {

            pst = con.prepareStatement("Insert Into productos values(?,?,?,?,?,?,?,?,?)");
            pst.setString(1, p.getCodigo());
            pst.setString(2, p.getTipo());
            pst.setString(3, p.getNombre());
            pst.setString(4, p.getDescripcion());
            pst.setDouble(5, p.getPrecio());
            pst.setDouble(6, p.getCantidad());
            pst.setDouble(7, p.getPreciocompra());
            pst.setDouble(8, p.getStockMin());
            pst.setString(9, p.getProveedor().getNit());
            pst.executeUpdate();
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
    }
  public static Producto  BuscarProducto(String ide) throws SQLException{
            if (ide == null) {
          throw new SQLException("No hay elemento clave de la clase Productos");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Producto  producto= null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from productos where codigo= ?");
         pst.setString(1, ide.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             producto = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return producto;
    }
    }
  public static Producto  BuscarProductonombre(String nom) throws SQLException{
            if (nom == null) {
          throw new SQLException("No hay elemento clave de la clase Productos");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Producto  producto  = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from productos where nombre= ?");
         pst.setString(1, nom.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             producto = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return producto;
    }
    }
  public static void ModificarProducto(Producto  p, String ide) throws SQLException, Exception {
        if (BuscarProducto(ide) == null) {
            throw new SQLException("Producto no registrado ");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("UPDATE productos SET codigo = ? ,"
                    + " nombre = ?,tipo = ?, descripcion = ?, precio = ? ,"
                    + " cantidad = ?, preciocompra = ?, stockmin = ?, codproveedor = ?  WHERE codigo = ?");	
            pst.setString(1, p.getCodigo());
            pst.setString(3, p.getTipo());
            pst.setString(2, p.getNombre());
            pst.setString(4, p.getDescripcion());
            pst.setDouble(5, p.getPrecio());
            pst.setDouble(6, p.getCantidad());
            pst.setDouble(7, p.getPreciocompra());
            pst.setDouble(8, p.getStockMin());
            pst.setString(9, p.getProveedor().getNit());
            pst.setString(10, ide);
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarProducto() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     productos = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from productos ");
        rs = pst.executeQuery();
        while(rs.next()) {
           productos.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  public static boolean ExisteProducto(int ide){
        boolean existe=false;

        return existe;
    }
  public static void EliminarProducto(String ide) throws SQLException, Exception {
        if (BuscarProducto(ide) == null) {
            throw new SQLException("No hay elemento clave de la clase Usuario");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("delete from productos where codigo = ?");
            pst.setString(1, ide.trim());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarProducto1(String sql) throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     productos = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()) {
           productos.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
   public static String ProductoStockmin() throws Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     String ultimoc="";
     DecimalFormat sd=new DecimalFormat("00");
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("SELECT COUNT(cantidad) AS Stockmin FROM productos  WHERE cantidad<stockmin AND cantidad!=0");
        rs = pst.executeQuery();
        while(rs.next()) {           
           String ultimo=rs.getString("Stockmin");
           int nro=Integer.parseInt(ultimo);
           ultimoc=sd.format(nro);
           
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
    return ultimoc;
}
  public static void setProducto(List aProducto) {
        productos = aProducto;
    }
  public static List getProducto() {
        return productos;
    }
}